ASP.NET Core অ্যাপ্লিকেশন ডিপ্লয়মেন্ট এবং হোস্টিং হল অ্যাপ্লিকেশনটি বাস্তব পরিবেশে (Production Environment) চালানোর জন্য সার্ভারে সরানো এবং সেখান থেকে অ্যাপ্লিকেশনটি চালানো। এই প্রক্রিয়াটি অনেক গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনকে লাইভ পরিবেশে সরবরাহ করতে সহায়তা করে, যাতে ব্যবহারকারীরা তা অ্যাক্সেস করতে পারে।
ASP.NET Core অ্যাপ্লিকেশন ডিপ্লয় এবং হোস্ট করার জন্য কয়েকটি জনপ্রিয় পদ্ধতি রয়েছে, যার মধ্যে IIS (Internet Information Services), Kestrel সার্ভার, Azure, AWS, এবং Docker অন্তর্ভুক্ত।
IIS (Internet Information Services) হলো Microsoft এর একটি জনপ্রিয় ওয়েব সার্ভার যা Windows Server-এ ব্যবহৃত হয়। ASP.NET Core অ্যাপ্লিকেশন IIS-এ হোস্ট করতে হলে, সাধারণত Kestrel ওয়েব সার্ভার ব্যবহার হয় এবং IIS একটি রিভার্স প্রক্সি সার্ভার হিসেবে কাজ করে।
Visual Studio বা Command Line ব্যবহার করে ASP.NET Core প্রজেক্টটি প্যাকেজ করুন:
dotnet publish --configuration Release --output ./publish
Physical Path
হিসেবে প্রোডাকশন ফোল্ডারের লোকেশন সেট করুন।Kestrel হল একটি উচ্চ পারফরম্যান্স, ক্রস-প্ল্যাটফর্ম ওয়েব সার্ভার যা ASP.NET Core অ্যাপ্লিকেশনের জন্য তৈরি করা হয়েছে। Kestrel সার্ভার সাধারণত IIS বা Nginx এর মতো রিভার্স প্রক্সি সার্ভারের সাথে ব্যবহৃত হয়, তবে একা Kestrel দিয়েও অ্যাপ্লিকেশন হোস্ট করা যেতে পারে।
Program.cs ফাইলে Kestrel সার্ভার কনফিগারেশন: Kestrel সার্ভার কনফিগারেশন ডিফল্টভাবে Program.cs ফাইলে করা থাকে। তবে আপনি বিভিন্ন কনফিগারেশন করতে পারেন:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseKestrel()
.UseUrls("http://localhost:5000"); // কাস্টম পোর্ট এবং URL
webBuilder.UseStartup<Startup>();
});
}
Kestrel দিয়ে অ্যাপ্লিকেশন চালানো:
dotnet run
কমান্ড দিয়ে Kestrel সার্ভারে অ্যাপ্লিকেশন চালানো যায়।Kestrel সাধারণত ডেভেলপমেন্ট বা পরীক্ষার জন্য ব্যবহৃত হয়, তবে একে প্রোডাকশন সার্ভারে ব্যবহার করা সম্ভব।
Microsoft Azure হলো Microsoft এর ক্লাউড কম্পিউটিং প্ল্যাটফর্ম যা ASP.NET Core অ্যাপ্লিকেশন হোস্ট করার জন্য একটি জনপ্রিয় পদ্ধতি। Azure-এর মাধ্যমে আপনি সহজেই স্কেলেবল এবং হাই-অ্যাভেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন।
অথবা Azure CLI ব্যবহার করে ডিপ্লয় করতে পারেন:
az webapp up --name <App Name> --resource-group <Resource Group>
AWS ক্লাউড প্ল্যাটফর্মের মাধ্যমে ASP.NET Core অ্যাপ্লিকেশন হোস্ট করা সম্ভব। Amazon EC2, Elastic Beanstalk, বা Lightsail ব্যবহার করে ASP.NET Core অ্যাপ্লিকেশন ডিপ্লয় করা যায়।
dotnet publish
কমান্ড দিয়ে প্রজেক্টের ফাইল প্যাকেজ করুন।Docker হল একটি কনটেইনারাইজেশন টুল যা আপনাকে অ্যাপ্লিকেশন, ডিপেনডেন্সি, এবং কনফিগারেশন একত্রিত করে একটি কনটেইনারে প্যাকেজ করতে সহায়তা করে। Docker ব্যবহার করে ASP.NET Core অ্যাপ্লিকেশন ডিপ্লয় করা সহজ এবং বহনযোগ্য।
Dockerfile তৈরি করা:
Dockerfile
তৈরি করুন, যা আপনার ASP.NET Core অ্যাপ্লিকেশনটি কনটেইনারে রূপান্তর করবে।FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["MyApp/MyApp.csproj", "MyApp/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Docker কনটেইনার তৈরি এবং রান করা:
docker build -t myapp .
docker run -d -p 5000:80 myapp
ডিপ্লয়মেন্ট এবং হোস্টিং হল ASP.NET Core অ্যাপ্লিকেশন লাইভ পরিবেশে চালানোর প্রক্রিয়া। এটি বিভিন্ন প্ল্যাটফর্ম এবং প্রযুক্তি ব্যবহার করে করা যেতে পারে, যেমন IIS, Kestrel, Azure, AWS, এবং Docker। প্রতিটি পদ্ধতির নিজস্ব সুবিধা এবং কার্যকারিতা রয়েছে, এবং আপনার অ্যাপ্লিকেশনের চাহিদা অনুযায়ী উপযুক্ত পদ্ধতি নির্বাচন করা গুরুত্বপূর্ণ।
ASP.NET Core অ্যাপ্লিকেশন ডিপ্লয়মেন্টের জন্য বিভিন্ন স্ট্রাটেজি এবং প্ল্যাটফর্ম ব্যবহার করা যায়। এটি একটি ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্ক হওয়ায় Windows, Linux, macOS, Docker, এবং ক্লাউড সার্ভিস (যেমন Azure বা AWS)-এ ডিপ্লয়মেন্ট করা যায়। ডিপ্লয়মেন্টের ধাপ এবং স্ট্রাটেজি ডিপ্লয়মেন্ট পরিবেশ এবং চাহিদার উপর নির্ভরশীল।
Self-Contained Deployment এমন একটি ডিপ্লয়মেন্ট পদ্ধতি, যেখানে .NET Runtime এবং লাইব্রেরিগুলো অ্যাপ্লিকেশনের সাথে অন্তর্ভুক্ত থাকে।
বৈশিষ্ট্য:
কমান্ড:
dotnet publish --configuration Release --runtime win-x64 --self-contained true
Framework-Dependent Deployment এমন একটি পদ্ধতি, যেখানে সার্ভারে .NET Runtime ইনস্টল থাকতে হয়।
বৈশিষ্ট্য:
কমান্ড:
dotnet publish --configuration Release
প্রথম ধাপে অ্যাপ্লিকেশনটি Release Build তৈরি করতে হবে:
dotnet publish --configuration Release
এটি bin/Release/net6.0/publish
ফোল্ডারে সব প্রয়োজনীয় ফাইল তৈরি করবে।
IIS (Internet Information Services) ব্যবহার করে Windows সার্ভারে ASP.NET Core অ্যাপ ডিপ্লয় করা হয়।
ধাপ:
publish
ফোল্ডার থেকে ফাইলগুলো কপি করুন এবং সাইট রুট ডিরেক্টরিতে রাখুন।web.config
ফাইল ব্যবহার করুন।Linux সার্ভারে NGINX বা Apache এর মাধ্যমে ASP.NET Core অ্যাপ চালানো হয়।
ধাপ:
.NET Runtime ইনস্টল করুন:
sudo apt-get install aspnetcore-runtime-6.0
publish
ফোল্ডার সার্ভারে কপি করুন।systemd
-এ সার্ভিস ফাইল তৈরি করুন:
sudo nano /etc/systemd/system/kestrel-app.service
ফাইল কনফিগারেশন:
[Unit]
Description=Example ASP.NET Core App
[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/myapp.dll
Restart=always
[Install]
WantedBy=multi-user.target
সার্ভিস রান করুন:
sudo systemctl start kestrel-app
sudo systemctl enable kestrel-app
Azure App Service ASP.NET Core অ্যাপ ডিপ্লয় করার জন্য একটি জনপ্রিয় প্ল্যাটফর্ম।
ধাপ:
AWS-এ ASP.NET Core অ্যাপ্লিকেশন Elastic Beanstalk বা EC2 ব্যবহার করে ডিপ্লয় করা যায়।
ধাপ:
publish
ফোল্ডারের ফাইলগুলো .zip
আকারে আপলোড করুন।ASP.NET Core অ্যাপ Docker ব্যবহার করে কন্টেইনারে ডিপ্লয় করা যায়।
Dockerfile তৈরি করুন:
FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "myapp.dll"]
Docker কমান্ড:
docker build -t myapp .
docker run -d -p 8080:80 myapp
ASP.NET Core অ্যাপ্লিকেশন ডিপ্লয়মেন্টের সঠিক স্ট্রাটেজি নির্বাচন এবং সেটআপ অ্যাপ্লিকেশনের কার্যকারিতা এবং স্থায়িত্ব নিশ্চিত করে। প্ল্যাটফর্ম এবং প্রয়োজন অনুযায়ী স্ট্রাটেজি নির্বাচন করা উচিত।
অ্যাপ্লিকেশন হোস্টিং হল অ্যাপ্লিকেশনকে ইন্টারনেটে বা অনলাইনে অ্যাক্সেসযোগ্য করার প্রক্রিয়া, এবং ক্লাউড প্ল্যাটফর্মগুলো এই কাজটি সহজ, স্কেলেবল, এবং নির্ভরযোগ্যভাবে করার সুযোগ প্রদান করে। Microsoft Azure, Amazon Web Services (AWS) এবং অন্যান্য ক্লাউড প্ল্যাটফর্ম অ্যাপ্লিকেশন হোস্টিংয়ের জন্য ব্যাপকভাবে ব্যবহৃত হয়। প্রতিটি প্ল্যাটফর্মের নিজস্ব সুবিধা, টুলস এবং সেবার ব্যবস্থা রয়েছে।
ASP.NET Core অ্যাপ্লিকেশনগুলোর জন্য Azure, AWS, এবং অন্যান্য ক্লাউড প্ল্যাটফর্মে হোস্ট করা বেশ কার্যকরী এবং জনপ্রিয় পদ্ধতি, কারণ ক্লাউড হোস্টিং অ্যাপ্লিকেশনের স্কেলাবিলিটি, রিলায়বিলিটি এবং পারফরম্যান্স উন্নত করে।
Azure একটি মাইক্রোসফটের ক্লাউড সেবা যা বিভিন্ন সার্ভিস এবং টুলস প্রদান করে, যার মধ্যে এক্সটেনডেড অ্যাপ হোস্টিং, ডেটাবেস, মেশিন লার্নিং, কনটেইনারাইজেশন এবং আরও অনেক কিছু রয়েছে। Azure-এ ASP.NET Core অ্যাপ হোস্ট করা খুবই সহজ এবং জনপ্রিয়। নিচে স্টেপ-বাই-স্টেপ গাইড দেওয়া হলো:
AWS ক্লাউডের মধ্যে অন্যতম বৃহত্তম এবং জনপ্রিয় প্ল্যাটফর্ম যা উচ্চ স্কেলেবিলিটি, রিলায়বিলিটি, এবং কম খরচে অ্যাপ হোস্টিং প্রদান করে। AWS-এ ASP.NET Core অ্যাপ হোস্ট করার জন্য বিভিন্ন সেবা ব্যবহার করা যেতে পারে, যেমন EC2, Elastic Beanstalk, এবং Lightsail।
AWS Elastic Beanstalk একটি পাস (Platform-as-a-Service) সেবা যা অ্যাপ্লিকেশন ডিপ্লয়, ম্যানেজ এবং স্কেল করতে সাহায্য করে।
Visual Studio ব্যবহার করে ডিপ্লয়:
AWS EC2 হল একটি IaaS (Infrastructure-as-a-Service) সেবা, যেখানে আপনি ভার্চুয়াল সার্ভার তৈরি করে ASP.NET Core অ্যাপ হোস্ট করতে পারেন।
Google Cloud Platform (GCP) একটি উন্নত ক্লাউড সেবা যা বিভিন্ন পাস, সাস, এবং আইএএস সেবা প্রদান করে। ASP.NET Core অ্যাপ Google App Engine বা Compute Engine ব্যবহার করে ডিপ্লয় করা যেতে পারে।
Google App Engine এর মাধ্যমে অ্যাপ হোস্ট করা:
DigitalOcean একটি সাশ্রয়ী মূল্যে ক্লাউড ইনফ্রাস্ট্রাকচার সেবা প্রদান করে। এখানে আপনি Droplets ব্যবহার করে ASP.NET Core অ্যাপ হোস্ট করতে পারেন। Droplet হল একটি ভার্চুয়াল সার্ভার, যেখানে আপনি IIS বা Nginx সেটআপ করে ASP.NET Core অ্যাপ হোস্ট করতে পারবেন।
ক্লাউড প্ল্যাটফর্মে অ্যাপ হোস্ট করার পর, পারফরম্যান্স এবং স্কেলিং কনফিগারেশন করা প্রয়োজন হতে পারে। বেশিরভাগ ক্লাউড প্ল্যাটফর্ম স্কেলিংয়ের জন্য নিম্নলিখিত অপশন প্রদান করে:
ক্লাউড প্ল্যাটফর্মে ASP.NET Core অ্যাপ হোস্ট করা অত্যন্ত সহজ এবং স্কেলযোগ্য। Azure, AWS, Google Cloud, এবং DigitalOcean প্রতিটি প্ল্যাটফর্মের নিজস্ব সুবিধা এবং সরঞ্জাম সরবরাহ করে। ক্লাউড হোস্টিং অ্যাপ্লিকেশনের পারফরম্যান্স, নিরাপত্তা এবং স্কেলেবিলিটি নিশ্চিত করতে সহায়তা করে। হোস্টিংয়ের জন্য App Services, Elastic Beanstalk, EC2 ইত্যাদি সেবা ব্যবহার করা যেতে পারে, এবং নিরাপত্তা কনফিগারেশন এবং স্কেলিং পদ্ধতি সঠিকভাবে কনফিগার করলে ক্লাউডে আপনার ASP.NET Core অ্যাপ্লিকেশন সফলভাবে চলতে পারে।
ASP.NET Core অ্যাপ্লিকেশন চালানোর জন্য দুটি জনপ্রিয় সার্ভার ব্যবহৃত হয়: IIS (Internet Information Services) এবং Kestrel। এই দুটি সার্ভার ব্যবহৃত হয় তাদের নিজস্ব বৈশিষ্ট্য, পারফরম্যান্স এবং ব্যবহারের পরিস্থিতির উপর ভিত্তি করে। ASP.NET Core অ্যাপ্লিকেশন দুটি সার্ভারেই চালানো যেতে পারে, তবে সাধারণত তাদের ব্যবহারের ধরন এবং স্থাপনার পদ্ধতি আলাদা। নিচে IIS এবং Kestrel সার্ভারের মধ্যে পার্থক্য এবং কীভাবে এগুলি ব্যবহার করা যায় তা বর্ণনা করা হয়েছে।
Kestrel হলো ASP.NET Core এর জন্য একটি উচ্চ পারফরম্যান্স, লাইটওয়েট ওয়েব সার্ভার যা মূলত ক্রস-প্ল্যাটফর্ম সমর্থন করে। এটি ASP.NET Core অ্যাপ্লিকেশন চালানোর জন্য ডিফল্ট সার্ভার হিসেবে ব্যবহৃত হয় এবং এটি HTTP/1.x, HTTP/2 প্রটোকল সমর্থন করে।
ASP.NET Core অ্যাপ্লিকেশন যদি Kestrel সার্ভারে চলবে, তবে সেটি ডিফল্টভাবে Program.cs ফাইলে কনফিগার করা হয়। নিচে একটি উদাহরণ দেওয়া হলো:
Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseKestrel()
.UseStartup<Startup>();
});
}
এখানে UseKestrel()
মেথড ব্যবহার করে Kestrel সার্ভার চালানোর জন্য কনফিগার করা হয়েছে।
IIS হলো Windows-ভিত্তিক একটি ফিচার-প্যাকড ওয়েব সার্ভার, যা ASP.NET Core অ্যাপ্লিকেশন চালানোর জন্য একটি জনপ্রিয় পছন্দ। IIS উচ্চ স্তরের সিকিউরিটি, স্কেলিং এবং রিভার্স প্রক্সি হিসেবে কাজ করে, এবং এটি ডোমেইন-ভিত্তিক অ্যাপ্লিকেশন ডেলিভারি এবং কনফিগারেশনের জন্য উপযুক্ত।
IIS সাধারণত Kestrel-এর সামনে একটি reverse proxy হিসেবে কাজ করে, যেখানে IIS সার্ভার ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করে এবং Kestrel সার্ভারে পাঠায়।
ASP.NET Core অ্যাপ্লিকেশন IIS-এ চালানোর জন্য, web.config ফাইল কনফিগার করতে হয়:
web.config ফাইল (IIS reverse proxy):
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" />
</system.webServer>
</configuration>
এখানে AspNetCoreModuleV2
হল IIS-এর জন্য ASP.NET Core অ্যাপ্লিকেশন চালানোর জন্য একটি মডিউল, যা Kestrel সার্ভারে ক্লায়েন্টের রিকোয়েস্ট পাস করতে সাহায্য করে।
বৈশিষ্ট্য | Kestrel | IIS |
---|---|---|
প্ল্যাটফর্ম | ক্রস-প্ল্যাটফর্ম (Windows, macOS, Linux) | শুধুমাত্র Windows |
পারফরম্যান্স | হালকা ও দ্রুত | উচ্চ পারফরম্যান্স, তবে ভারী হতে পারে |
নিরাপত্তা | সার্ভারের প্রাথমিক নিরাপত্তা নেই | উন্নত নিরাপত্তা, যেমন SSL, অ্যাক্সেস কন্ট্রোল |
স্কেলিং | স্কেলিং সাপোর্ট থাকতে পারে, তবে নির্দিষ্ট নয় | স্কেলিং এবং লোড ব্যালেন্সিং সহজে করা যায় |
কনফিগারেশন | সহজ এবং কাস্টমাইজযোগ্য | কনফিগারেশন বেশি উন্নত এবং শক্তিশালী |
রিভার্স প্রক্সি | সাধারণত সরাসরি একা ব্যবহৃত হয় | Kestrel এর সাথে রিভার্স প্রক্সি হিসেবে কাজ করে |
আপনি যদি ASP.NET Core অ্যাপ্লিকেশন তৈরি করেন তবে Kestrel এবং IIS এর পারফরম্যান্স এবং নিরাপত্তার মধ্যে সঠিক সমন্বয় বেছে নিতে হবে, নির্ভর করে আপনার অ্যাপ্লিকেশনের ধরন এবং পরিবেশের উপর।
Docker একটি ওপেন সোর্স প্ল্যাটফর্ম, যা অ্যাপ্লিকেশনকে কনটেইনারের মধ্যে চালানোর জন্য ব্যবহৃত হয়। Docker কনটেইনারাইজেশনের মাধ্যমে ASP.NET Core অ্যাপ্লিকেশনগুলোকে সহজে ডিপ্লয় এবং স্কেল করা যায়।
Docker ব্যবহার করার জন্য আপনার সিস্টেমে Docker ইন্সটল করতে হবে। Docker ইন্সটল করতে Docker Official Website থেকে আপনার অপারেটিং সিস্টেমের জন্য উপযুক্ত Docker Desktop ডাউনলোড এবং ইন্সটল করুন।
একটি নতুন ASP.NET Core অ্যাপ তৈরি করুন বা একটি বিদ্যমান অ্যাপ ব্যবহার করুন। নতুন অ্যাপ তৈরি করতে:
dotnet new webapi -n DockerizedApp
cd DockerizedApp
Dockerfile
হলো একটি টেক্সট ফাইল, যেখানে কনটেইনার তৈরি এবং কনফিগারেশনের জন্য প্রয়োজনীয় নির্দেশাবলী থাকে। ASP.NET Core অ্যাপের জন্য একটি সাধারণ Dockerfile
:
# Base image
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# Build image
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["DockerizedApp.csproj", "./"]
RUN dotnet restore "./DockerizedApp.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "DockerizedApp.csproj" -c Release -o /app/build
# Publish image
FROM build AS publish
RUN dotnet publish "DockerizedApp.csproj" -c Release -o /app/publish
# Final stage
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerizedApp.dll"]
Dockerfile এর ভিত্তিতে ইমেজ তৈরি করতে নিচের কমান্ডটি ব্যবহার করুন:
docker build -t dockerizedapp .
এখানে:
-t dockerizedapp
: ইমেজের নাম নির্ধারণ করে।.
: বর্তমান ডিরেক্টরিতে থাকা Dockerfile থেকে ইমেজ তৈরি করে।Docker ইমেজ থেকে একটি কনটেইনার চালাতে:
docker run -d -p 8080:80 --name myapp dockerizedapp
এখানে:
-d
: কনটেইনারকে ব্যাকগ্রাউন্ডে চালায়।-p 8080:80
: হোস্ট মেশিনের 8080 পোর্টকে কনটেইনারের 80 পোর্টের সঙ্গে ম্যাপ করে।--name myapp
: কনটেইনারের নাম নির্ধারণ করে।এখন ব্রাউজারে http://localhost:8080
এ গিয়ে অ্যাপটি অ্যাক্সেস করুন।
যদি একাধিক কনটেইনার চালাতে হয়, তাহলে Docker Compose ব্যবহার করা সুবিধাজনক। docker-compose.yml
ফাইল তৈরি করুন:
version: '3.4'
services:
web:
image: dockerizedapp
build:
context: .
ports:
- "8080:80"
Docker Compose দিয়ে অ্যাপ রান করতে:
docker-compose up -d
চলমান কনটেইনার দেখতে:
docker ps
কনটেইনার থামাতে:
docker stop myapp
কনটেইনার মুছে ফেলতে:
docker rm myapp
ইমেজ মুছে ফেলতে:
docker rmi dockerizedapp
Docker ব্যবহার করে ASP.NET Core অ্যাপ কনটেইনারাইজ করা আপনার অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং ডিপ্লয়মেন্টকে আরও কার্যকর ও পোর্টেবল করে তোলে।
common.read_more